{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# LETID - Outdoor Environments \n", "\n", "This is an example on how to model LETID progression in outdoor environments\n", "\n", "We can use the equations in this library to model LETID progression in a simulated outdoor environment, given that we have weather and system data. This example makes use of tools from the fabulous [pvlib](https://pvlib-python.readthedocs.io/en/stable/) library to calculate system irradiance and temperature, which we use to calculate progression in LETID states.\n", "\n", "This will illustrate the potential of \"Temporary Recovery\", i.e., the backwards transition of the LETID defect B->A that can take place with carrier injection at lower temperatures.\n", "\n", "\n", "**Requirements:**\n", "- `pvlib`, `pandas`, `numpy`, `matplotlib`\n", "\n", "**Objectives:**\n", "1. Use `pvlib` and provided weather files to set up a temperature and injection timeseries\n", "2. Define necessary solar cell device parameters\n", "3. Define necessary degradation parameters: degraded lifetime and defect states\n", "4. Run through timeseries, calculating defect states\n", "5. Calculate device degradation and plot\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# if running on google colab, uncomment the next line and execute this cell to install the dependencies and prevent \"ModuleNotFoundError\" in later cells:\n", "# !pip install pvdeg==0.3.3" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from pvdeg import letid, collection, utilities, DATA_DIR\n", "\n", "import pvlib\n", "import os\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pvdeg" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Working on a Windows 10\n", "Python version 3.11.7 | packaged by Anaconda, Inc. | (main, Dec 15 2023, 18:05:47) [MSC v.1916 64 bit (AMD64)]\n", "Pandas version 2.2.0\n", "pvlib version 0.10.3\n", "pvdeg version 0.2.4.dev83+ge2ceab9.d20240422\n" ] } ], "source": [ "# This information helps with debugging and getting support :)\n", "import sys, platform\n", "print(\"Working on a \", platform.system(), platform.release())\n", "print(\"Python version \", sys.version)\n", "print(\"Pandas version \", pd.__version__)\n", "print(\"pvlib version \", pvlib.__version__)\n", "print(\"pvdeg version \", pvdeg.__version__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we'll use pvlib to create and run a model system, and use the irradiance, temperature, and operating point of that model to set up our LETID model\n", "For this example, we'll model a fixed latitude tilt system at NREL, in Golden, CO, USA, using [NSRDB](https://nsrdb.nrel.gov/) hourly PSM weather data, SAPM temperature models, and module and inverter models from the CEC database." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# load weather and location data, use pvlib read_psm3 function with map_variables = True\n", "\n", "sam_file = 'psm3.csv'\n", "weather, meta = pvdeg.weather.read(os.path.join(DATA_DIR, sam_file), file_type='PSM3', map_variables = True)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | Year | \n", "Month | \n", "Day | \n", "Hour | \n", "Minute | \n", "dni | \n", "dhi | \n", "ghi | \n", "temp_air | \n", "dew_point | \n", "wind_speed | \n", "relative_humidity | \n", "poa_global | \n", "temp_cell | \n", "temp_module | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1999-01-01 00:30:00-07:00 | \n", "1999 | \n", "1 | \n", "1 | \n", "0 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-5.0 | \n", "1.8 | \n", "79.39 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1999-01-01 01:30:00-07:00 | \n", "1999 | \n", "1 | \n", "1 | \n", "1 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-4.0 | \n", "1.7 | \n", "80.84 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1999-01-01 02:30:00-07:00 | \n", "1999 | \n", "1 | \n", "1 | \n", "2 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-4.0 | \n", "1.5 | \n", "82.98 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1999-01-01 03:30:00-07:00 | \n", "1999 | \n", "1 | \n", "1 | \n", "3 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-4.0 | \n", "1.3 | \n", "85.01 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1999-01-01 04:30:00-07:00 | \n", "1999 | \n", "1 | \n", "1 | \n", "4 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-4.0 | \n", "1.3 | \n", "85.81 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
1999-12-31 19:30:00-07:00 | \n", "1999 | \n", "12 | \n", "31 | \n", "19 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-3.0 | \n", "0.9 | \n", "83.63 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1999-12-31 20:30:00-07:00 | \n", "1999 | \n", "12 | \n", "31 | \n", "20 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-3.0 | \n", "1.2 | \n", "86.82 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1999-12-31 21:30:00-07:00 | \n", "1999 | \n", "12 | \n", "31 | \n", "21 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-4.0 | \n", "1.6 | \n", "83.78 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1999-12-31 22:30:00-07:00 | \n", "1999 | \n", "12 | \n", "31 | \n", "22 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-4.0 | \n", "1.7 | \n", "81.22 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1999-12-31 23:30:00-07:00 | \n", "1999 | \n", "12 | \n", "31 | \n", "23 | \n", "30 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-5.0 | \n", "1.8 | \n", "79.43 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
8760 rows × 15 columns
\n", "\n", " | ghi | \n", "dni | \n", "dhi | \n", "temp_air | \n", "wind_speed | \n", "relative_humidity | \n", "precipitable_water | \n", "
---|---|---|---|---|---|---|---|
1999-01-01 00:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.8 | \n", "79.39 | \n", "0.891869 | \n", "
1999-01-01 01:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.7 | \n", "80.84 | \n", "0.908158 | \n", "
1999-01-01 02:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.5 | \n", "82.98 | \n", "0.932199 | \n", "
1999-01-01 03:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.3 | \n", "85.01 | \n", "0.955004 | \n", "
1999-01-01 04:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.3 | \n", "85.81 | \n", "0.963991 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
1999-12-31 19:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.9 | \n", "83.63 | \n", "0.939501 | \n", "
1999-12-31 20:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.2 | \n", "86.82 | \n", "0.975338 | \n", "
1999-12-31 21:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.6 | \n", "83.78 | \n", "0.941186 | \n", "
1999-12-31 22:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.7 | \n", "81.22 | \n", "0.912427 | \n", "
1999-12-31 23:30:00-07:00 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.8 | \n", "79.43 | \n", "0.892318 | \n", "
8760 rows × 7 columns
\n", "\n", " | Datetime | \n", "Temperature | \n", "Injection | \n", "
---|---|---|---|
0 | \n", "1999-01-01 08:30:00-07:00 | \n", "3.348774 | \n", "0.006239 | \n", "
1 | \n", "1999-01-01 09:30:00-07:00 | \n", "12.378439 | \n", "0.031607 | \n", "
2 | \n", "1999-01-01 10:30:00-07:00 | \n", "16.595081 | \n", "0.044220 | \n", "
3 | \n", "1999-01-01 11:30:00-07:00 | \n", "17.457240 | \n", "0.043201 | \n", "
4 | \n", "1999-01-01 12:30:00-07:00 | \n", "6.392783 | \n", "0.007124 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
4296 | \n", "1999-12-31 12:30:00-07:00 | \n", "9.515577 | \n", "0.001151 | \n", "
4297 | \n", "1999-12-31 13:30:00-07:00 | \n", "28.119796 | \n", "0.044499 | \n", "
4298 | \n", "1999-12-31 14:30:00-07:00 | \n", "23.314672 | \n", "0.035130 | \n", "
4299 | \n", "1999-12-31 15:30:00-07:00 | \n", "17.890528 | \n", "0.027891 | \n", "
4300 | \n", "1999-12-31 16:30:00-07:00 | \n", "4.552365 | \n", "0.001188 | \n", "
4301 rows × 3 columns
\n", "\n", " | Datetime | \n", "Temperature | \n", "Injection | \n", "NA | \n", "NB | \n", "NC | \n", "tau | \n", "Jsc | \n", "Voc | \n", "Isc | \n", "FF | \n", "Pmp | \n", "Pmp_norm | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "1999-01-01 08:30:00-07:00 | \n", "3.348774 | \n", "0.006239 | \n", "100.000000 | \n", "0.000000 | \n", "0.000000e+00 | \n", "115.000000 | \n", "41.590997 | \n", "0.666327 | \n", "10.106612 | \n", "0.840987 | \n", "5.663467 | \n", "1.000000 | \n", "
1 | \n", "1999-01-01 09:30:00-07:00 | \n", "12.378439 | \n", "0.031607 | \n", "99.997547 | \n", "0.002453 | \n", "0.000000e+00 | \n", "114.996922 | \n", "41.590987 | \n", "0.666327 | \n", "10.106610 | \n", "0.840987 | \n", "5.663460 | \n", "0.999999 | \n", "
2 | \n", "1999-01-01 10:30:00-07:00 | \n", "16.595081 | \n", "0.044220 | \n", "99.991953 | \n", "0.008047 | \n", "6.072523e-09 | \n", "114.989905 | \n", "41.590966 | \n", "0.666326 | \n", "10.106605 | \n", "0.840986 | \n", "5.663446 | \n", "0.999996 | \n", "
3 | \n", "1999-01-01 11:30:00-07:00 | \n", "17.457240 | \n", "0.043201 | \n", "99.985929 | \n", "0.014071 | \n", "2.755257e-08 | \n", "114.982350 | \n", "41.590942 | \n", "0.666324 | \n", "10.106599 | \n", "0.840986 | \n", "5.663430 | \n", "0.999994 | \n", "
4 | \n", "1999-01-01 12:30:00-07:00 | \n", "6.392783 | \n", "0.007124 | \n", "99.985664 | \n", "0.014336 | \n", "2.864303e-08 | \n", "114.982018 | \n", "41.590941 | \n", "0.666324 | \n", "10.106599 | \n", "0.840986 | \n", "5.663429 | \n", "0.999993 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
4296 | \n", "1999-12-31 12:30:00-07:00 | \n", "9.515577 | \n", "0.001151 | \n", "42.029575 | \n", "53.766632 | \n", "4.203792e+00 | \n", "72.484546 | \n", "41.385898 | \n", "0.656929 | \n", "10.056773 | \n", "0.839317 | \n", "5.545020 | \n", "0.979086 | \n", "
4297 | \n", "1999-12-31 13:30:00-07:00 | \n", "28.119796 | \n", "0.044499 | \n", "42.030231 | \n", "53.765654 | \n", "4.204115e+00 | \n", "72.485034 | \n", "41.385901 | \n", "0.656929 | \n", "10.056774 | \n", "0.839318 | \n", "5.545022 | \n", "0.979086 | \n", "
4298 | \n", "1999-12-31 14:30:00-07:00 | \n", "23.314672 | \n", "0.035130 | \n", "42.036311 | \n", "53.759433 | \n", "4.204257e+00 | \n", "72.488135 | \n", "41.385924 | \n", "0.656930 | \n", "10.056780 | \n", "0.839318 | \n", "5.545034 | \n", "0.979088 | \n", "
4299 | \n", "1999-12-31 15:30:00-07:00 | \n", "17.890528 | \n", "0.027891 | \n", "42.048873 | \n", "53.746813 | \n", "4.204313e+00 | \n", "72.494425 | \n", "41.385972 | \n", "0.656932 | \n", "10.056791 | \n", "0.839318 | \n", "5.545058 | \n", "0.979093 | \n", "
4300 | \n", "1999-12-31 16:30:00-07:00 | \n", "4.552365 | \n", "0.001188 | \n", "42.049445 | \n", "53.746242 | \n", "4.204314e+00 | \n", "72.494710 | \n", "41.385974 | \n", "0.656932 | \n", "10.056792 | \n", "0.839318 | \n", "5.545059 | \n", "0.979093 | \n", "
4301 rows × 13 columns
\n", "\n", " | Temperature | \n", "Injection | \n", "NA | \n", "NB | \n", "NC | \n", "tau | \n", "Jsc | \n", "Voc | \n", "Isc | \n", "FF | \n", "Pmp | \n", "Pmp_norm | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|
time | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
1999-01-01 00:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "100.000000 | \n", "0.000000e+00 | \n", "0.000000e+00 | \n", "115.000000 | \n", "41.590997 | \n", "0.666327 | \n", "10.106612 | \n", "0.840987 | \n", "5.663467 | \n", "1.000000 | \n", "
1999-01-01 01:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "100.000000 | \n", "1.702422e-15 | \n", "0.000000e+00 | \n", "115.000000 | \n", "41.590997 | \n", "0.666327 | \n", "10.106612 | \n", "0.840987 | \n", "5.663467 | \n", "1.000000 | \n", "
1999-01-01 02:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "100.000000 | \n", "3.404843e-15 | \n", "5.403329e-36 | \n", "115.000000 | \n", "41.590997 | \n", "0.666327 | \n", "10.106612 | \n", "0.840987 | \n", "5.663467 | \n", "1.000000 | \n", "
1999-01-01 03:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "100.000000 | \n", "5.107265e-15 | \n", "1.620999e-35 | \n", "115.000000 | \n", "41.590997 | \n", "0.666327 | \n", "10.106612 | \n", "0.840987 | \n", "5.663467 | \n", "1.000000 | \n", "
1999-01-01 04:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "100.000000 | \n", "6.809686e-15 | \n", "3.241997e-35 | \n", "115.000000 | \n", "41.590997 | \n", "0.666327 | \n", "10.106612 | \n", "0.840987 | \n", "5.663467 | \n", "1.000000 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
1999-12-31 19:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "27.833654 | \n", "6.778463e+01 | \n", "4.381716e+00 | \n", "66.112142 | \n", "41.333851 | \n", "0.654974 | \n", "10.044126 | \n", "0.838966 | \n", "5.519257 | \n", "0.974537 | \n", "
1999-12-31 20:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "27.833654 | \n", "6.778463e+01 | \n", "4.381716e+00 | \n", "66.112142 | \n", "41.333851 | \n", "0.654974 | \n", "10.044126 | \n", "0.838966 | \n", "5.519257 | \n", "0.974537 | \n", "
1999-12-31 21:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "27.833654 | \n", "6.778463e+01 | \n", "4.381716e+00 | \n", "66.112142 | \n", "41.333851 | \n", "0.654974 | \n", "10.044126 | \n", "0.838966 | \n", "5.519257 | \n", "0.974537 | \n", "
1999-12-31 22:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "27.833654 | \n", "6.778463e+01 | \n", "4.381716e+00 | \n", "66.112142 | \n", "41.333851 | \n", "0.654974 | \n", "10.044126 | \n", "0.838966 | \n", "5.519257 | \n", "0.974537 | \n", "
1999-12-31 23:30:00-07:00 | \n", "0.0 | \n", "NaN | \n", "27.833654 | \n", "6.778463e+01 | \n", "4.381716e+00 | \n", "66.112142 | \n", "41.333851 | \n", "0.654974 | \n", "10.044126 | \n", "0.838966 | \n", "5.519257 | \n", "0.974537 | \n", "
8760 rows × 12 columns
\n", "